﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PalcoCentral.Library;

namespace PalcoCentral
{
    public partial class pcGerirPagamentos : Form
    {
        private Database.person stu;

        public pcGerirPagamentos(Database.person stu)
        {
            this.stu = stu;
            InitializeComponent();
            bannerLabel.Text = stu.personId+". "+stu.personName+"\nGestor Principal > Ver Pessoa > Gerir Pagamentos";
            updateList();
        }

        
        private void updateList(){
            labelPerson.Text = "Aluno Nº "+stu.personId + " » "+stu.personName+" » BI Nº "+stu.bi;
            Library.OperationStatus os = Database.PersonDBAdapter.getInstance().showPayments(stu.personId);
            if (os.sucess)
            {
                List<Database.monthlypayment> res = (List<Database.monthlypayment>)os.res;
                listaPagamentos.DataSource = res;
                listaPagamentos.Update();
                if (res != null && res.Count > 0)
                {
                    //personDB.DataSource = res;

                }
                else
                {
                    //MessageBox.Show("Não forma encontrados pagamentos.");
                    //No Results Found
                }
            }
        }

        private void addPagamento_Click(object sender, EventArgs e)
        {
            Database.monthlypayment mp = new Database.monthlypayment();
            string month = ""+this.mesBoxLP.SelectedItem;
            if (string.IsNullOrEmpty(month))
            {
                Utils.errorFields("Insira o mês.", "Erro na operação");
                return;
            }
            else {
                mp.month = month;
            }

            int y=0;
            if(!int.TryParse(this.anoPagET.Text, out y)){
                Utils.errorFields("O ano inserido é inválido.","Erro na operação");
                return;
            }
            mp.year = y;
            decimal val = 0;
            if (!decimal.TryParse(this.quantiaListaPagET.Text, out val))
            {
                Utils.errorFields("Quantia inserida inválida.", "Erro na operação");
                return;
            }
            mp.value = val;
            mp.studentId = stu.personId;
            mp.observationsMP = observacoesPag.Text;
            Library.OperationStatus os = Database.PersonDBAdapter.getInstance().addPayment(mp);
            if (os.sucess)
            {
                Utils.sucessFields("Novo pagamento inserido com sucesso.", "Operação bem sucedida");
                this.anoPagET.ResetText();
                this.quantiaListaPagET.ResetText();
                this.mesBoxLP.SelectedIndex = -1;
                this.observacoesPag.ResetText();
                updateList();
            }
            else
            {
                //TODO: Mostra mensagem e erro
                Utils.errorFields("Houve um erro na inserção de pagamento.\n"+os.errorMessage, "Erro na operação");
                MessageBox.Show("Quantia não inserida. Devido: "+os.errorMessage);
            }
        }

        private void deletePagamento_Click(object sender, EventArgs e)
        {
            if (!(listaPagamentos.Items.Count == 0))
            {
                Database.monthlypayment mp = (Database.monthlypayment)listaPagamentos.SelectedItem;
                Library.OperationStatus os = Database.PersonDBAdapter.getInstance().deletePayment(mp);
                if (MessageBox.Show("Deseja mesmo remover este pagamento da base de dados?", "Remover pagamento", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (os.sucess)
                    {
                        Utils.sucessFields("Registo de pagamento eliminado com sucesso.", "Operação bem sucedida");
                        updateList();
                    }
                    else
                    {
                        //TODO: Mostra mensagem e erro
                        Utils.errorFields("Registo de pagamento selecionado não foi eliminado.\n" + os.errorMessage, "Erro na operação");

                    }
                }
            }
            else
            {
                Utils.errorFields("Não existem pagamentos na lista.","Impossivel remover pagamento");
            }
        }

        private void closeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.Close();
        }
    }
}
